/**
 * 
 */
package model;

import java.util.Calendar;
import java.util.Date;

/**
 * @author spiller.sebastian
 *
 */
public class Datum{

	public int jahr;
	
	public int monat;
	
	public int tag;
	
	/**
	 * erzeugt ein Datum mit den Werten für den heutigen Tag
	 * 
	 */
	public Datum(){
		this(new Date());
	}
	
	/**
	 * erzeugt ein neues Datum
	 * 
	 * @param jahr
	 * @param monat
	 * @param tag
	 */
	public Datum(int jahr, int monat, int tag) {
		this.jahr = jahr;
		this.monat = monat;
		this.tag = tag;
	}
	
	/**
	 * erzeugt ein neues Datum, mit dem selben Tag des gegebenen Dates
	 * 
	 * @param datum
	 */
	public Datum(Date datum){
		Calendar cal = Calendar.getInstance();
		cal.setTime(datum);
		
		this.jahr = cal.get(Calendar.YEAR);
		this.monat = cal.get(Calendar.MONTH)+1;
		this.tag = cal.get(Calendar.DAY_OF_MONTH);
	}
	
	/**
	 * prueft ob das gegebene datum vor diesem liegt
	 * 
	 * @param datum
	 * @return true, wenn datum auf einen vorrangegangenen oder auf den selben Tag deutet wie dieses Datum-Objekt
	 */
	public boolean liegtVor(Date datum) {
	
		return liegtVor(new Datum(datum));
	}

	/**
	 * prueft ob das gegebene datum vor diesem liegt
	 * 
	 * @param datum
	 * @return false, wenn datum auf einen vorrangegangenen oder auf den selben Tag deutet wie dieses Datum-Objekt
	 */
	public boolean liegtVor(Datum datum) {
		
		if(this.jahr < datum.jahr){
			return true;
		}
		if(this.monat < datum.monat){
			return true;
		}
		if(this.tag < datum.tag){
			return true;
		}
		return false;
	}
	
	
	/**
	 * addiert die gegebene anzahl an Tagen zu diesem Datum
	 * anzahlTage darf auch negativ sein
	 * 
	 * @param anzahlTage
	 */
	public void addiereTage(int anzahlTage){
		Calendar cal = Calendar.getInstance();
		cal.set(jahr, monat-1, tag);
		
		cal.add(Calendar.DAY_OF_MONTH, anzahlTage);
		
		this.jahr = cal.get(Calendar.YEAR);
		this.monat = cal.get(Calendar.MONTH)+1;
		this.tag = cal.get(Calendar.DAY_OF_MONTH);

	}
	
	
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	public String toString(){
		return String.format("%02d. %02d. %04d", tag,monat,jahr);
	}

	/**
	 * erzeugt einen String passend fuer SQL statements
	 * @return
	 */
	public String toSQLString(){
		return String.format("%04d-%02d-$02d", jahr,monat,tag);
	}

}
